package com.jsy.mini12306.common.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.*;

import java.io.Serializable;
import java.util.Comparator;
import java.util.List;


/**
 * 车次（图中的路径）(Train)实体类
 *
 * @author: SongyangJi
 * @since: 2021-09-01 13:41:08
 * @description:
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Train implements Serializable {
    private static final long serialVersionUID = -98177284782831070L;
    /**
     * 车次id(自增)
     */
    @TableId(type = IdType.AUTO)
    private Integer trainId;
    /**
     * 车次名（如：G123）
     */
    private String trainName;
    /**
     * 列车型号id
     */
    private Integer trainPatternId;
    /**
     * 全程公里数
     */
    private Double distance;
    /**
     * 高速动车组列车（G字头）
     * 城际动车组列车（C字头）
     * 普通动车组列车（D字头）
     * 直达特快旅客列车（Z字头）
     * 特快旅客列车（T字头）
     * 快速旅客列车（K字头）
     */
    private TrainType type;

    /**
     * 列车状态
     */
    private Status status;
    /**
     * 担当路局
     */
    private String manager;

    private String startStationName;

    private String endStationName;


    public static enum Status {
        WAIT("正在候车"),
        CHECK("正在检票"),
        STOP_CHECK("停止检票"),
        LEAVE("已发车"),
        OTHER("其他");

        @Getter
        String meaning;

        Status(String meaning) {
            this.meaning = meaning;
        }
    }

    /**
     * 列车型号
     */
    @TableField(exist = false)
    TrainPattern trainPattern;

    /**
     * 不同等级的座位情况，后转为 Map 结构
     */
    @TableField(exist = false)
    List<TrainSeat> trainSeats;

    /**
     * 路径上的点
    */
    @TableField(exist = false)
    List<TrainPassStation> trainPassStations;

    public void sortByStationsSequence() {
        trainPassStations.sort(Comparator.comparingInt(TrainPassStation::getSequence));
    }


}
